package org.jeecg.modules.online.cgreport.service;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONArray;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.online.cgreport.entity.OnlCgreportHead;
import org.jeecg.modules.online.cgreport.model.OnlCgreportModel;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.online.config.exception.DBException;

/**
 * @Description: 在线报表配置
 * @Author: jeecg-boot
 * @Date: 2019-03-08
 * @Version: V1.0
 */
public interface IOnlCgreportHeadService extends IService<OnlCgreportHead> {

	/**
	 * 修改全部项，包括新增、修改、删除
	 * 
	 * @param values
	 * @return
	 */
	Result<?> editAll(OnlCgreportModel values);

	/*
	* @Description: 删除online报表
	* @author: scott
	* @date: 2020/3/25 12:16
	* @param id: 
	* @Return: org.jeecg.common.api.vo.Result<?>
	*/
	public Result<?> delete(String id);

	/**
	* @Description: 批量删除成功
	* @author: scott
	* @date: 2020/3/25 11:48
	* @param ids: 多个主键ID
	* @Return: org.jeecg.common.api.vo.Result<?>
	*/
	public Result<?> bathDelete(String[] ids);

	/**
	 * 执行SQL语句
	 * 
	 * @param sql
	 * @return
	 */
    Map<String, Object> executeSelectSql(String sql, String onlCgreportHeadId, Map<String, Object> params) throws SQLException;

	/**
	 * 执行SQL语句
	 *
	 * @param sql
	 * @return
	 */
    Map<String, Object> executeSelectSqlDynamic(String dbKey, String sql, Map<String, Object> params, String onlCgreportHeadId);

	/**
	 * 动态数据源： 获取SQL解析的字段
	 */
	public List<String> getSqlFields(String sql,String dbKey) throws SQLException, DBException;

	
	/**
	 * 解析SQL参数
	 */
	public List<String> getSqlParams(String sql);

	Map<String, Object> queryCgReportConfig(String reportCode);
	
//	public List<Map<?, ?>> queryByCgReportSql(String sql, Map params,Map paramData,int page, int rows);

	/**
	 * online报表查询 字典下拉框的数据  字典编码配置成sql语句 需要用下拉搜索展示 只展示前10条数据
	 * @param sql
	 * @param keyword
	 * @return
	 */
	List<DictModel> queryDictSelectData(String sql, String keyword);


	/**
	 * 查询 报表配置信息
	 * @return
	 */
	Map<String, Object> queryColumnInfo(String code, boolean queryDict);

	/**
	 * 查询列的字典信息
	 * @param dictCode
	 * @param records
	 * @param fieldName
	 * @return
	 */
	List<DictModel> queryColumnDict(String dictCode, JSONArray records, String fieldName);


	/**
	 * 查询列的字典信息  issues/I4Q6JY
	 * @Author: taoYan
	 * @Date: 20220120
	 * @param dictCode 字典编码（sql语句）
	 * @param records  结果数据
	 * @param fieldName 配置字典的字段名
	 * @return
	 */
	List<DictModel> queryColumnDictList(String dictCode, List<Map<String, Object>> records, String fieldName);

}
